package com.hospital.workstation.service;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hospital.common.core.domain.R;
import com.hospital.workstation.domain.HisMedicalOrders;
import com.hospital.workstation.domain.PatientBaseInfo;
import com.hospital.workstation.domain.vo.PatientBaseInfoVo;
import com.hospital.workstation.domain.bo.PatientBaseInfoBo;
import com.hospital.common.core.page.TableDataInfo;
import com.hospital.common.core.domain.PageQuery;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 患者基本信息Service接口
 *
 * @author whb
 * @date 2023-02-08
 */
public interface IPatientBaseInfoService {

    /**
     * 查询患者基本信息
     */
    PatientBaseInfoVo queryById(Long id);

    /**
     * 查询患者基本信息列表
     */
    TableDataInfo<PatientBaseInfoVo> queryPageList(PatientBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 查询患者基本信息列表
     */
    List<PatientBaseInfoVo> queryList(PatientBaseInfoBo bo);

    /**
     * 查询患者基本信息视图对象
     *
     * @param bo
     * @return
     */
    PatientBaseInfoVo queryOne(PatientBaseInfoBo bo);

    /**
     * 新增患者基本信息
     */
    Boolean insertByBo(PatientBaseInfoBo bo);

    /**
     * 修改患者基本信息
     */
    Boolean updateByBo(PatientBaseInfoBo bo);

    /**
     * 校验并批量删除患者基本信息信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询患者基本信息
     *
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<PatientBaseInfoVo> queryPageListOfPatientInfo(PatientBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 出院
     *
     * @param id 患者ID
     * @return
     */
    R<Void> leave(Long id);

    /**
     * 查询历史病历
     *
     * @param medicalRecordNo 病历号
     * @param pageQuery       分页对象
     * @return
     */
    TableDataInfo<PatientBaseInfoVo> queryHistoryPageList(Integer medicalRecordNo, PageQuery pageQuery);

    /**
     * 批量修改患者基本信息
     *
     * @param bo
     * @return
     */
    Boolean updateBatchByWrapper(PatientBaseInfoBo bo);

    /**
     * 查询患者监护分级
     *
     * @param medicalRecordNo 病历号
     * @return
     */
    R<String> queryGuardianLevel(Integer medicalRecordNo);

    /**
     * 查询患者信息列表
     *
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<PatientBaseInfoVo> getPatientBaseInfoListOfTcm(PatientBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 查询病症集合
     *
     * @param medicalRecordNo 流水号
     * @param diagType        诊断类型（2出院诊断 3入院诊断）
     * @return
     */
    R<Map<String, List<String>>> getIllnessAndSymptomByMedicalRecordNo(Integer medicalRecordNo, String diagType);

    /**
     * 获取不良反应参数拼接字符串
     *
     * @param userId 用户id
     * @return
     */
    R<String> getAdrParams(Long userId);
}
